package RRHH_Modelo;

import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import java.util.Date;

public class RHH_PAGO_SUBSIDIOS {

    private int ID;
    private int ID_SUBSIDIOS;
    private int ESTADO;
    private double MONTO;
    private int CUOTA;
    private String DESCRIPCION_ANULACION;
    private Date FECHA_PAGO;
    private Date FECHA_PAGADO;
    private Conexion con = null;

    public RHH_PAGO_SUBSIDIOS(Conexion con) {
        this.con = con;
    }

    public RHH_PAGO_SUBSIDIOS(int ID, int ID_SUBSIDIOS, int ESTADO, double MONTO, int CUOTA, String DESCRIPCION_ANULACION, Date FECHA_PAGO, Date FECHA_PAGADO) {
        this.ID = ID;
        this.ID_SUBSIDIOS = ID_SUBSIDIOS;
        this.ESTADO = ESTADO;
        this.MONTO = MONTO;
        this.CUOTA = CUOTA;
        this.DESCRIPCION_ANULACION = DESCRIPCION_ANULACION;
        this.FECHA_PAGO = FECHA_PAGO;
        this.FECHA_PAGADO = FECHA_PAGADO;
    }

    public int Insertar() throws SQLException {
        String consulta = "insert into BROKER.RHH_PAGO_SUBSIDIOS (ID, ID_SUBSIDIOS, ESTADO, MONTO, CUOTA, DESCRIPCION_ANULACION, FECHA_PAGO) VALUES (" + ID + "," + ID_SUBSIDIOS + "," + ESTADO + "," + MONTO + "," + CUOTA + ",'" + DESCRIPCION_ANULACION + "',to_date('" + getFECHA_PAGO() + "','dd/MM/yyyy'))";
        con.EjecutarSentencia(consulta);
        consulta = "select BROKER.RHH_PAGO_SUBSIDIOS_SEQ.currval as ID from dual";
        ResultSet rs = con.EjecutarConsulta(consulta);
        rs.next();
        return rs.getInt("ID");
    }

    public boolean Modificar() throws SQLException {
        String consulta = "update BROKER.RHH_PAGO_SUBSIDIOS set ESTADO = " + ESTADO + ",MONTO = " + MONTO + ",CUOTA = " + CUOTA + ",DESCRIPCION_ANULACION = '" + DESCRIPCION_ANULACION + "',FECHA_PAGO = to_date('" + getFECHA_PAGO() + "','dd/MM/yyyy'),FECHA_PAGADO = SYSDATE where ID =  " + getID();
        con.EjecutarSentencia(consulta);
        return true;
    }

    public boolean EliminarXid() throws SQLException {
        String consulta = "delete from BROKER.RHH_PAGO_SUBSIDIOS where ID= " + getID();
        con.EjecutarSentencia(consulta);
        return true;
    }

    public int CantidadDePagos(int id_subsidio) throws SQLException {
        String consulta = "select COUNT(*) AS CANTIDAD from BROKER.RHH_PAGO_SUBSIDIOS where ID_SUBSIDIOS = " + id_subsidio;
        ResultSet rs = con.EjecutarConsulta(consulta);
        if(rs.next())
            return rs.getInt("CANTIDAD");
        else
            return 0;
    }

    public List<RHH_PAGO_SUBSIDIOS> Todos() throws SQLException {
        String consulta = "select * from BROKER.RHH_PAGO_SUBSIDIOS";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_PAGO_SUBSIDIOS> lista = Cargar(rs);
        return lista;
    }
    
    public List<RHH_PAGO_SUBSIDIOS> TodosSinREalizarPago() throws SQLException {
        String consulta = "SELECT RHH_PAGO_SUBSIDIOS.*\n" +
                        "FROM BROKER.RHH_PAGO_SUBSIDIOS\n" +
                        "WHERE (RHH_PAGO_SUBSIDIOS.ESTADO = 0)";

        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
    
    public List<RHH_PAGO_SUBSIDIOS> TodosSinPagoContabilidad() throws SQLException {
        String consulta = "SELECT RHH_PAGO_SUBSIDIOS.*\n" +
                        "FROM BROKER.RHH_PAGO_SUBSIDIOS\n" +
                        "WHERE (RHH_PAGO_SUBSIDIOS.ESTADO = 5)";

        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
    
    public RHH_PAGO_SUBSIDIOS Buscar(int id) throws SQLException {
        String consulta = "select * from BROKER.RHH_PAGO_SUBSIDIOS where id = "+id;
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_PAGO_SUBSIDIOS> lista = Cargar(rs);
        if(lista.size()>0)
            return lista.get(0);
        else
            return null;
    }
    
    public List<RHH_PAGO_SUBSIDIOS> TodosxSubsidio(int idsub) throws SQLException {
        String consulta = "select * from BROKER.RHH_PAGO_SUBSIDIOS where ID_SUBSIDIOS="+idsub+" ORDER BY CUOTA";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_PAGO_SUBSIDIOS> lista = Cargar(rs);
        return lista;
    }

    public List<RHH_PAGO_SUBSIDIOS> Cargar(ResultSet rs) throws SQLException {
        List<RHH_PAGO_SUBSIDIOS> lista = new ArrayList<RHH_PAGO_SUBSIDIOS>();
        while (rs.next()) {
            RHH_PAGO_SUBSIDIOS objeto = new RHH_PAGO_SUBSIDIOS(con);
            objeto.setID(rs.getInt("ID"));
            objeto.setID_SUBSIDIOS(rs.getInt("ID_SUBSIDIOS"));
            objeto.setESTADO(rs.getInt("ESTADO"));
            objeto.setMONTO(rs.getDouble("MONTO"));
            objeto.setCUOTA(rs.getInt("CUOTA"));
            objeto.setDESCRIPCION_ANULACION(rs.getString("DESCRIPCION_ANULACION"));
            objeto.setFECHA_PAGO(rs.getDate("FECHA_PAGO"));
            objeto.setFECHA_PAGADO(rs.getDate("FECHA_PAGADO"));
            lista.add(objeto);
        }
        return lista;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public int getID_SUBSIDIOS() {
        return ID_SUBSIDIOS;
    }

    public void setID_SUBSIDIOS(int ID_SUBSIDIOS) {
        this.ID_SUBSIDIOS = ID_SUBSIDIOS;
    }

    public int getESTADO() {
        return ESTADO;
    }

    public void setESTADO(int ESTADO) {
        this.ESTADO = ESTADO;
    }

    public double getMONTO() {
        return MONTO;
    }

    public void setMONTO(double MONTO) {
        this.MONTO = MONTO;
    }

    public int getCUOTA() {
        return CUOTA;
    }

    public void setCUOTA(int CUOTA) {
        this.CUOTA = CUOTA;
    }

    public String getDESCRIPCION_ANULACION() {
        return DESCRIPCION_ANULACION;
    }

    public void setDESCRIPCION_ANULACION(String DESCRIPCION_ANULACION) {
        this.DESCRIPCION_ANULACION = DESCRIPCION_ANULACION;
    }

    public String getFECHA_PAGO() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MMMM/yyyy");
        return sdf.format(FECHA_PAGO);
    }

    public void setFECHA_PAGO(Date FECHA_PAGO) {
        this.FECHA_PAGO = FECHA_PAGO;
    }

    public String getFECHA_PAGADO() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MMMM/yyyy");
        if(FECHA_PAGADO==null)
            return "";
        else
            return sdf.format(FECHA_PAGADO);
    }

    public void setFECHA_PAGADO(Date FECHA_PAGADO) {
        this.FECHA_PAGADO = FECHA_PAGADO;
    }

    public Conexion getCon() {
        return this.con;
    }

    public void setCon(Conexion con) {
        this.con = con;
    }
}
